package com.fzy.common.redis;

import java.util.List;
import java.util.Map;

/**
 * Jedis 接口
 *
 * @author lishw
 */
public interface JedisClient {
    /**
     * xxx
     *
     * @param key xxx xxx
     * @return miss
     */
    String get(String key);

    /**
     * xxx
     *
     * @param key   xxx xxx
     * @param value xxx xxx
     * @return miss
     */
    String set(String key, String value);

    /**
     * xxx
     *
     * @param hkey xxx xxx
     * @param key  xxx xxx
     * @return miss
     */
    String hget(String hkey, String key);

    /**
     * xxx
     *
     * @param hkey  xxx xxx
     * @param key   xxx
     * @param value xxx
     * @return miss
     */
    long hset(String hkey, String key, String value);

    /**
     * xxx
     *
     * @param key xxx
     * @return miss
     */
    long incr(String key);

    /**
     * xxx
     *
     * @param key    xxx
     * @param second xxx
     * @return miss
     */
    long expire(String key, Integer second);

    /**
     * xxx
     *
     * @param key xxx
     * @return miss
     */
    long ttl(String key);

    /**
     * xxx
     *
     * @param key xxx
     * @return miss
     */
    long del(String key);

    /**
     * xxx
     *
     * @param hkey xxx
     * @param key  xxx
     * @return miss
     */
    long hdel(String hkey, String key);


    /**
     * redis 存储java序列化对象
     *
     * @param key
     * @param object
     * @return
     * @author 冯赵杨
     * @create 2018/9/7
     */
    String setObject(String key, Object object);

    /**
     * redis 获取java反序列化的对象
     *
     * @param key
     * @return
     * @author 冯赵杨
     * @create 2018/9/7
     */
    <T> T  getObject(String key);

    /**
     * redis 存储json字符串
     *
     * @param key
     * @param object
     * @return
     * @author 冯赵杨
     * @create 2018/9/7
     */
    String setJson(String key, Object object);

    /**
     * redis 获取json转化的对象
     *
     * @param key
     * @param clazz
     * @return
     * @author 冯赵杨
     * @create 2018/9/7
     */
    <T> T getJson(String key, Class<T> clazz);

    /**
     * 同时将多个field - value(域-值)对设置到哈希表key中
     *
     * @param key
     * @param hash
     * @return
     * @author 冯赵杨
     * @create 2018/9/7
     */
     String hmset(String key, Map<String, String> hash);


     /**
      * 返回哈希表key中，一个或多个给定域的值
      *
      * @param key
      * @param fields
      * @return
      * @author 冯赵杨
      * @create 2018/9/7
      */
    List<String> hmget(String key, String... fields);


    /**
     * 返回哈希表key中，所有的域和值
     *
     * @param key
     * @return
     * @author 冯赵杨
     * @create 2018/9/7
     */
     Map<String, String> hgetAll(String key);

}
